/*
20. 有效的括号
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1：

输入：s = "()"
输出：true
示例 2：

输入：s = "()[]{}"
输出：true
示例 3：

输入：s = "(]"
输出：false
*/
package main

import "fmt"

func main(){
	s := "()[]{}"
	// for k,v := range s{
	// 	fmt.Println(k,string(v))
	// }
	valid := isValid(s)
	fmt.Println(valid)

}

func isValid(s string) bool {
	var stack []string
	for _,v := range s{
		if string(v) == "(" || string(v) == "{" || string(v) == "["{
			stack = append(stack, string(v))
		}else{
			if len(stack) == 0{
				return false
			}
			if string(v) == ")"{
				if stack[len(stack)-1] != "("{
					return false
				}
			}
			if string(v) == "}"{
				if stack[len(stack)-1] != "{"{
					return false
				}
			}
			if string(v) == "]"{
				if stack[len(stack)-1] != "["{
					return false
				}
			}
			stack = stack[:len(stack)-1]
		}

	}
	if len(stack) > 0{
		return false
	}else{
	return true
	}
}